// 你的朋友正在使用键盘输入他的名字 name。偶尔，在键入字符 c 时，按键可能会被长按，而字符可能被输入 1 次或多次。

// 你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字（其中一些字符可能被长按），那么就返回 True。

//  

// 示例 1：

// 输入：name = "alex", typed = "aaleex"
// 输出：true
// 解释：'alex' 中的 'a' 和 'e' 被长按。
// 示例 2：

// 输入：name = "saeed", typed = "ssaaedd"
// 输出：false
// 解释：'e' 一定需要被键入两次，但在 typed 的输出中不是这样。
// 示例 3：

// 输入：name = "leelee", typed = "lleeelee"
// 输出：true
// 示例 4：

// 输入：name = "laiden", typed = "laiden"
// 输出：true
// 解释：长按名字中的字符并不是必要的。
//  

// 提示：

// name.length <= 1000
// typed.length <= 1000
// name 和 typed 的字符都是小写字母。

#include <string>
#include <vector>

using namespace std;

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int m = name.size();
        int n = typed.size();
        int j = 0;
        for(int i = 0; i < n; i++)  {
            if(typed[i] == name[j] && j < m) {
                j++;
                continue;
            } else if(typed[i] == name[j-1]) {
                continue;
            } else {
                return false;
            }
        }
        if (j == m)
            return true;
        else
            return false;
    }
};

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int m = name.size();
        int n = typed.size();
        int i{0};
        int j{0};
        int count1{1};
        int count2{1};
        char c{};
        while (i < m && j < n) {
            if (name[i] != typed[j]) {
                return false;
            }
            c = name[i];
            ++i;
            ++j;
            while (i < m && name[i] == c) {
                ++count1;
                ++i;
            }
            while (j < n && typed[j] == c) {
                ++count2;
                ++j;
            }
            if (count1 > count2) {
                return false;
            }
            count1 = 1;
            count2 = 1;
        }
        return i == m && j == n; // name 和 typed 都需要遍历完
    }
};

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int i{0};
        int j{0};
        int m = name.size();
        int n = typed.size();
        while (j < n) {
            if (i < m && name[i] == typed[j]) {
                ++i;
                ++j;
            } else if (j > 0 && typed[j] == typed[j - 1]) {
                ++j;
            } else {
                return false;
            }
        }
        return i == m;
    }
};